/**
 * Предоставляет вспомогательные утилиты для классов, предназначенных
 * для сериализации и десериализации объектов в XML-представлении.
 */

#ifndef _XMLSERIALIZER_H
#define	_XMLSERIALIZER_H

#include <string>
#include <xercesc/dom/DOM.hpp>
#include "conf.h"

namespace etu {
namespace common {

XERCES_CPP_NAMESPACE_USE

class XmlSerializer {
    
    DOMImplementation* domImpl;

public:
    XmlSerializer() {}
    XmlSerializer(const XmlSerializer& orig) { this->domImpl = orig.domImpl; }
    virtual ~XmlSerializer() {}
    
protected:

    /**
     * Создаёт пустой DOM-документ с корнем с заданным именем
     * @param rootNodeName имя корня создаваемого DOM-документа
     * @return пустой DOM-документ
     */
    virtual DOMDocument* createDocument(const char* rootNodeName);

    /**
     * Формирует XML-представление заданного DOM-дерева
     * @param doc DOM-документ
     * @return XML-представление заданного DOM-дерева
     */
    virtual std::string documentToString(DOMDocument* doc);

    /**
     * Формирует DOM-документ на основе XML-представления
     * @param str XML-представление
     * @return DOM-документ
     */
    virtual DOMDocument* buildDocument(const std::string& str);
};

}
}

#endif	/* _XMLSERIALIZER_H */

